﻿@namespace Oqtane.Modules.Admin.Jobs
@inherits ModuleBase
@inject NavigationManager NavigationManager
@inject IJobService JobService

<table class="table table-borderless">
    <tr>
        <td>
            <Label For="name" HelpText="Enter the job name">Name: </Label>
        </td>
        <td>
            <input id="name" class="form-control" @bind="@_name" />
        </td>
    </tr>
    <tr>
        <td>
            <Label For="type" HelpText="Enter the job type">Type: </Label>
        </td>
        <td>
            <input id="type" class="form-control" @bind="@_jobType" />
        </td>
    </tr>
    <tr>
        <td>
            <Label For="enabled" HelpText="Select whether you want the job enabled or not">Enabled? </Label>
        </td>
        <td>
            <select id="enabled" class="form-control" @bind="@_isEnabled">
                <option value="True">Yes</option>
                <option value="False">No</option>
            </select>
        </td>
    </tr>
    <tr>
        <td>
            <Label For="runs-every" HelpText="Select how often you want the job to run">Runs Every: </Label>
        </td>
        <td>
            <input id="runs-every" class="form-control" @bind="@_interval" />
            <select id="runs-every" class="form-control" @bind="@_frequency">
                <option value="m">Minute(s)</option>
                <option value="H">Hour(s)</option>
                <option value="d">Day(s)</option>
                <option value="M">Month(s)</option>
            </select>
        </td>
    </tr>
    <tr>
        <td>
            <Label For="starting" HelpText="What time do you want the job to start">Starting: </Label>
        </td>
        <td>
            <input id="starting" class="form-control" @bind="@_startDate" />
        </td>
    </tr>
    <tr>
        <td>
            <Label For="ending" HelpText="When do you want the job to end">Ending: </Label>
        </td>
        <td>
            <input id="ending" class="form-control" @bind="@_endDate" />
        </td>
    </tr>
    <tr>
        <td>
            <Label For="retention-log" HelpText="What items do you want in the retention log">Retention Log (Items): </Label>
        </td>
        <td>
            <input id="retention-log" class="form-control" @bind="@_retentionHistory" />
        </td>
    </tr>
</table>
<button type="button" class="btn btn-success" @onclick="SaveJob">Save</button>
<NavLink class="btn btn-secondary" href="@NavigateUrl()">Cancel</NavLink>

@code {
    private string _name = string.Empty;
    private string _jobType = string.Empty;
    private string _isEnabled = "True";
    private string _interval = string.Empty;
    private string _frequency = string.Empty;
    private string _startDate = string.Empty;
    private string _endDate = string.Empty;
    private string _retentionHistory = "10";

    public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host;

    private async Task SaveJob()
    {
        if (_name != string.Empty && !string.IsNullOrEmpty(_jobType) && _frequency != string.Empty && _interval != string.Empty && _retentionHistory != string.Empty)
        {
            var job = new Job();
            job.Name = _name;
            job.JobType = _jobType;
            job.IsEnabled = Boolean.Parse(_isEnabled);
            job.Frequency = _frequency;
            job.Interval = int.Parse(_interval);

            if (_startDate == string.Empty)
            {
                job.StartDate = null;
            }
            else
            {
                job.StartDate = DateTime.Parse(_startDate);
            }

            if (_endDate == string.Empty)
            {
                job.EndDate = null;
            }
            else
            {
                job.EndDate = DateTime.Parse(_endDate);
            }

            job.RetentionHistory = int.Parse(_retentionHistory);
            job.IsStarted = false;
            job.IsExecuting = false;
            job.NextExecution = null;

            try
            {
                job = await JobService.AddJobAsync(job);
                await logger.LogInformation("Job Added {Job}", job);
                NavigationManager.NavigateTo(NavigateUrl());
            }
            catch (Exception ex)
            {
                await logger.LogError(ex, "Error Adding Job {Job} {Error}", job, ex.Message);
                AddModuleMessage("Error Adding Job", MessageType.Error);
            }
        }
        else
        {
            AddModuleMessage("You Must Provide The Job Name, Type, Frequency, and Retention", MessageType.Warning);
        }
    }

}
